package com.ddone.aop.annotation.advice;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * @author ddone
 * @date 2024/3/19-22:30
 * *   TODO:
 * *     1.创建增强对象实现增强的非核心代码
 * *     2.方法添加对应位置的注解 @Before [前置]  @After [后置 一定会执行]
 * *     3.注解中添加了切点表达式，选中目标的方法
 * *     4.类上添加注解，@Aspect实现切面
 * *     5.配置文件中开启注解支持 <aop:aspectj-autoproxy />
 */
@Component
@Aspect  //切面 = 切入點 + 增强
@Slf4j
@Order(1)
public class LogService {
    @Pointcut(value = "execution(* com.*.aop.*.impl.*.*(..))")
    public void logPointCut() {}

    // @Before(value = "execution(* com..impl.*.*(..))")
    @Before(value = "logPointCut()")
    // 从定义好的切点提取
    public void before() {
        log.info("method into~~~~~~~~~~~~");
    }

    // 从定义好的切点提取
    // @After("execution(* com..impl.*.*(..))")
    @After(value = "logPointCut()")
    public void after() {
        log.info("method out~~~~~~~~~~~~~~");
    }
}
